﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using Estructuras.Comunes;

namespace Estructuras.Consola.ConsolaBDSql
{
    /// <summary>
    /// Almacena las propiedades de un elemento específico.
    /// </summary>
    public class PBDSql : Propiedades
    {
        /// <summary>
        /// Entrada de datos.
        /// </summary>
        public string Entrada
        {
            get
            {
                return this.getPropiedadString(CBDSql.Entrada);
            }
            set
            {
                this.setOrAddPropiedad(CBDSql.Entrada, value);
            }
        }

        /// <summary>
        /// Estructura de entrada.
        /// </summary>
        public string EstructuraEntrada
        {
            get
            {
                return this.getPropiedadString(CBDSql.EstructuraEntrada);
            }
            set
            {
                this.setOrAddPropiedad(CBDSql.EstructuraEntrada, value);
            }
        }

        /// <summary>
        /// Tipo de base de datos.
        /// </summary>
        public TipoBaseDatos TipoBD
        {
            get
            {
                return ConversionesTipoBaseDatos.ToTipoBD(this.getPropiedadString(CBDSql.TipoBD));
            }
            set
            {
                this.setOrAddPropiedad(CBDSql.TipoBD, ConversionesTipoBaseDatos.ToString(value));
            }
        }

        /// <summary>
        /// Cadena de conexión a la base de datos.
        /// </summary>
        public string CadenaConexion
        {
            get
            {
                return this.getPropiedadString(CBDSql.CadenaConexion);
            }
            set
            {
                this.setOrAddPropiedad(CBDSql.CadenaConexion, value);
            }
        }

        /// <summary>
        /// Fichero SQL a ejecutar.
        /// </summary>
        public string FicheroSQL
        {
            get
            {
                return this.getPropiedadString(CBDSql.FicheroSQL);
            }
            set
            {
                this.setOrAddPropiedad(CBDSql.FicheroSQL, value);
            }
        }

        /// <summary>
        /// Constructor por defecto.
        /// </summary>
        public PBDSql()
            : base()
        {
        }

        /// <summary>
        /// Obtiene los parámetros a partir del fichero XML indicado.
        /// </summary>
        /// <param name="fichero">Fichero de configuración XML</param>
        override public void leer(string fichero)
        {
            base.leer(fichero);
            XmlDocument xml = LeerXml.AbrirFicheroParametros(fichero);
            this.Entrada = LeerXml.ObtenerValorCampo(xml, CBDSql.RutaEntrada);
            this.EstructuraEntrada = LeerXml.ObtenerValorCampo(xml, CBDSql.RutaEstructuraEntrada);

            // Configuración
            try
            { this.TipoBD = ConversionesTipoBaseDatos.ToTipoBD(LeerXml.ObtenerValorCampo(xml, CBDSql.RutaTipoBD)); }
            catch (Excepcion)
            { this.TipoBD = TipoBaseDatos.ODBC; }

            this.CadenaConexion = LeerXml.ObtenerValorCampo(xml, CBDSql.RutaCadenaConexion);
            this.FicheroSQL = LeerXml.ObtenerValorCampo(xml, CBDSql.RutaFicheroSQL);
        }
    }
}
